﻿#define _CRT_SECURE_NO_WARNINGS 1
//bool arrayStringsAreEqual(char ** word1, int word1Size, char ** word2, int word2Size){
//	int i = 0;
//	int j = 0;
//	int k = 0;
//	int len = 0;
//	char a[1000];
//	for (i = 0; i<word1Size; i++)
//	{
//		len = strlen(word1[i]);
//		for (j = 0; j<len; j++)
//		{
//			a[k++] = word1[i][j];
//		}
//	}
//	int n = 0;
//	for (i = 0; i<word2Size; i++)
//	{
//		len = strlen(word2[i]);
//		for (j = 0; j<len; j++)
//		{
//			if (a[n++] != word2[i][j])
//			{
//				return 0;
//			}
//		}
//	}
//	if (n != k)
//	{
//		return 0;
//	}
//	return 1;
//}
//
//
//
//
//
//
//
//给你一个整数数组 nums，请你返回其中位数为 偶数 的数字的个数
//int findNumbers(int* nums, int numsSize){
//	int i = 0;
//	int tmp = 0;
//	int count = 0;
//	int num = 0;
//	for (i = 0; i<numsSize; i++)
//	{
//		tmp = nums[i];
//		num = 0;
//		while (tmp)
//		{
//			tmp /= 10;
//			num++;
//		}
//		if (num % 2 == 0)
//		{
//			count++;
//		}
//	}
//	return count;
//}
//
//
//
//
//
//
//
//
///**
//* Note: The returned array must be malloced, assume caller calls free().
//*/
//int* decompressRLElist(int* nums, int numsSize, int* returnSize){
//	int i = 0;
//	int j = 0;
//	int k = 0;
//	*returnSize = 0;
//	for (i = 0; i<numsSize; i += 2)
//	{
//		*returnSize += nums[i];
//	}
//	int* a = (int*)calloc(*returnSize, sizeof(int));
//	for (i = 0; i<numsSize; i += 2)
//	{
//		for (j = 0; j<nums[i]; j++)
//		{
//			a[k++] = nums[i + 1];
//		}
//	}
//	return a;
//}
//
//
//
//
//
//
//给你一个整数 n，请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。
//int subtractProductAndSum(int n){
//	int add = 0;
//	int max = 1;
//	while (n)
//	{
//		add += n % 10;
//		max *= n % 10;
//		n /= 10;
//	}
//	max = max - add;
//	return max;
//}







//桌上有 n 堆力扣币，每堆的数量保存在数组 coins 中。
//我们每次可以选择任意一堆，拿走其中的一枚或者两枚，求拿完所有力扣币的最少次数。
//int minCount(int* coins, int coinsSize){
//	int count = 0;
//	int i;
//	for (i = 0; i<coinsSize; i++)
//	{
//		count += (coins[i] + 1) / 2;
//	}
//	return count;
//}







//给你一个有效的 IPv4 地址 address，返回这个 IP 地址的无效化版本。
//所谓无效化 IP 地址，其实就是用 "[.]" 代替了每个 "."。
//char * defangIPaddr(char * address){
//	char* add = malloc(strlen(address) + 7);
//	int i = 0, j = 0;
//	while (address[i])
//	{
//		if (address[i] == '.')
//		{
//			add[j] = '[';
//			j++;
//			add[j] = '.';
//			j++;
//			add[j] = ']';
//			j++;
//			i++;
//		}
//		else
//		{
//			add[j] = address[i];
//			j++;
//			i++;
//		}
//	}
//	add[j] = '\0';
//	return add;
//}








//给你一个数组 items ，其中 items[i] = [typei, colori, namei] ，描述第 i 件物品的类型、颜色以及名称。
//另给你一条由两个字符串 ruleKey 和 ruleValue 表示的检索规则。
//如果第 i 件物品能满足下述条件之一，则认为该物品与给定的检索规则 匹配 ：
//ruleKey == "type" 且 ruleValue == typei 。
//ruleKey == "color" 且 ruleValue == colori 。
//ruleKey == "name" 且 ruleValue == namei 。
//统计并返回 匹配检索规则的物品数量 。
//来源：力扣（LeetCode）
//链接：https ://leetcode-cn.com/problems/count-items-matching-a-rule
//著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
//int countMatches(char *** items, int itemsSize, int* itemsColSize, char * ruleKey, char * ruleValue){
//	int i = 0;
//	int j = 0;
//	int count = 0;
//	if (strcmp(ruleKey, "type") == 0)
//	{
//		j = 0;
//	}
//	else if (strcmp(ruleKey, "color") == 0)
//	{
//		j = 1;
//	}
//	else if (strcmp(ruleKey, "name") == 0)
//	{
//		j = 2;
//	}
//	for (i = 0; i<itemsSize; i++)
//	{
//		if (strcmp(items[i][j], ruleValue) == 0)
//		{
//			count++;
//		}
//	}
//	return count;
//}








///**给你一个数组 nums ，数组中有 2n 个元素，按 [x1,x2,...,xn,y1,y2,...,yn] 的格式排列。
//
//请你将数组按 [x1,y1,x2,y2,...,xn,yn] 格式重新排列，返回重排后的数组。
//
//来源：力扣（LeetCode）
//链接：https://leetcode-cn.com/problems/shuffle-the-array
//著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
//* Note: The returned array must be malloced, assume caller calls free().
//*/
//int* shuffle(int* nums, int numsSize, int n, int* returnSize){
//	int* a = (int*)malloc(numsSize*sizeof(int));
//	int i = 0;
//	int j = 0;
//	for (i = 0; i<n; i++)
//	{
//		a[j++] = nums[i];
//		a[j++] = nums[i + n];
//	}
//	*returnSize = numsSize;
//	return a;
//}









//memmove函数实现
//#include <stdio.h>
//#include <assert.h>
//void* my_memmove(void* dest, void* src, size_t n)
//{
//	assert(dest);
//	assert(src);
//	void* tmp = dest;
//	if(dest > src)
//	{
//		while (n--)
//		{
//			*(char*)dest = *(char*)src;
//			dest = (char*)dest + 1;
//			src = (char*)src + 1;
//		}
//	}
//	else
//	{
//		while (n--)
//		{
//			*((char*)dest + n) = *((char*)src + n);
//		}
//	}
//	return tmp;
//}
//int main()
//{
//	int a[20] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//	my_memmove(a , a+4, 5);
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", a[i]);
//	}
//	printf("\n");
//	return 0;
//}









//memcpy函数实现
//#include <stdio.h>
//#include <assert.h>
//void my_memcpy(void* dest, void* src, size_t n)
//{
//	assert(dest);断言
//	assert(src);
//	while (n--)
//	{
//		*(char*)dest = *(char*)src;类型转换然后赋值
//		dest = (char*)dest + 1;不可以直接++；
//		src = (char*)src + 1;
//	}
//}
//int main()
//{
//	int a[20] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//	int b[5] = { 9, 8, 7, 6, 5 };
//	my_memcpy(a, b, 20);//如果想要拷贝5个int类型的整数需要乘4个字节；
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", a[i]);
//	}
//	printf("\n");
//	return 0;
//}